Здравствуйте. Извините , что поднимаю вопрос неоднократно обсуждавшийся, (нашёл две ветки на вашем форуме, но не смог решить проблему).
Пишу простой текстовый редактор для кода, в нём над наследником QTextEdit в определённый момент должен появляться наследник QListWidget с списком методов и свойств переменной класса, о чём идёт речь, все прекрасно поняли. Под Виндовс всё работает таким образом:
как только вызывается methidsList->show() (или methodsList->setVisible(true), в linux от этого пришлось отказатся, т к список не хочет становится видимым) фокус ввода передаётся ему. В линукс же при вызове methodsList->show() список появляется, но фокус ввода при этом остается у QTextEdit. В Windows я не могу сделать так, чтобы фокус был у QTextEdit, в Linux - наоборот, чтобы он был у QListWidget.
C++ (Qt)
void MainWindow :: onDot()
{
QTextCursor cursor = editor->textCursor();
int pos = cursor.selectionStart();
int selectionstart = pos;
QString t = getVarName(pos).trimmed();
int d = t.indexOf(".");
if (d == 0) {
pos -= t.length();
t = getVarName(pos) + t;
}
CurrentFile file;
QString type;
if (t.indexOf("this.") != -1) {
t = t.split(".")[1];
type = file.searchClassField(editor->toPlainText(), t, selectionstart); //ищем в полях текущего класса
}else
type = file.searchVar(editor->toPlainText(), t, selectionstart); //ищем ближайшее вхождение переменной
if (type != "undefined") {
bool f = methods->setType(type);
if (!f) return;
this->selectionStart = selectionstart;
QString path = QApplication::applicationDirPath();
path += "/data/setting/listmethods.ini";
IniFile init(path);
int x = init["dx"].toInt();
int y = init["dy"].toInt();
int w = init["width"].toInt();
int h = init["height"].toInt();
QRect r = editor->cursorRect();
methods-> setGeometry(r.x() + this->x() + editor->x() + x, r.y() + editor->y() + this->y() + y, w, h);
methods->show();
methods->setFocus(Qt::TabFocusReason);
}
}
Можете "на пальцах" объяснить, как работать с setFocus, setFocusPolicy? Буду благодарен.