Виджет QDialog с нулевым родителем всегда виден - PullRequest
0 голосов
/ 18 января 2012

Я работаю с QT 3.3.Мне нужно сделать виджет QDialog с нулевым родителем всегда видимым, а не оставаться сверху (WStyle_StaysOnTop), потому что этот флаг блокирует доступ для основного приложения.Мне нужна функциональность экранной клавиатуры для моего виджета QDialog.

1 Ответ

1 голос
/ 18 января 2012

Надеюсь, я правильно понял вопрос. Вот минимальный пример того, что вы хотите.

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

{

ui-> setupUi (это);

QDialog *dia = new QDialog(this);
//Set the windowflags
dia->setWindowFlags(dia->windowFlags() | Qt::Tool);

dia->show();

QWidget *central = new QWidget;
QHBoxLayout *mainLayout = new QHBoxLayout;
QLineEdit *edit = new QLineEdit;

//Add sample QLineEdit to test the input focus for mainwindow
mainLayout->addWidget(edit);
central->setLayout(mainLayout);
setCentralWidget(central);

}

редактирование:

Если вы хотите иметь возможность свернуть и развернуть рассматриваемый диалог из systray, вам нужно создать QSystrayIcon и контекстное меню для него:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

{ ui-> setupUi (это);

QDialog *dia = new QDialog(this);

dia->setWindowFlags(dia->windowFlags() | Qt::Tool);

dia->show();

QWidget *central = new QWidget;
QHBoxLayout *mainLayout = new QHBoxLayout;
QLineEdit *edit = new QLineEdit;
mainLayout->addWidget(edit);
central->setLayout(mainLayout);
setCentralWidget(central);

//Create the icon for systray
//NOTE this icon is application wide 
QSystemTrayIcon *icon = new QSystemTrayIcon(QIcon(QPixmap("/usr/share/icons/oxygen/22x22/status/user-away.png")), dia);

icon->setVisible(true);

//Create context menu to manipulate the dialog
QMenu *contextMenu = new QMenu;

QAction *minimizeDialog = contextMenu->addAction("Minimize dialog");
QAction *restoreDialog = contextMenu->addAction("Restore dialog");

connect(minimizeDialog, SIGNAL(triggered()), dia, SLOT(hide()));
connect(restoreDialog, SIGNAL(triggered()), dia, SLOT(show()));

//Add it to the icon
icon->setContextMenu(contextMenu);

} * * тысяча двадцать-один

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...