如何檢查窗口/對話框是否已打開?我用這段代碼打開一個新的對話框,但每次點擊它時,對話框都會一直打開。顯然不是方式設置對話框工作。Qt - 打開窗口的單個實例
Class *someClass = new Class();
someclass->show();
如何檢查窗口/對話框是否已打開?我用這段代碼打開一個新的對話框,但每次點擊它時,對話框都會一直打開。顯然不是方式設置對話框工作。Qt - 打開窗口的單個實例
Class *someClass = new Class();
someclass->show();
在您的代碼中,您每次創建一個新的窗口/小部件/對話框。 在其他地方初始化*someClass
,然後只顯示它。
class Foo
{
public:
Foo() { someClass = new SomeClass() }
void fooClicked() { someClass->show() }
private:
SomeClass *someClass;
};
使用QPointer:
QPointer<MyDialog> dialog = new MyDialog(this);
dialog->show();
...
if (dialog) dialog->show();
如果存在對話框就會顯示出來。如果在此期間被刪除,它將保留0而不是無效地址,並且最後一行永遠不會被執行 - 它不會被顯示,但是如果需要可以重新創建它。
你可以在你的窗口類上創建一個靜態指針。它允許您存儲上次打開的窗口對象。
class MyWindow : public QWidget {
public :
static MyWindow* instance;
...
}
無論何時您創建新實例,您都可以設置instance
。當實例爲空時,您可以創建一個新窗口。當你想關閉打開的窗口時,你應該再次創建實例null。這允許您只有一個打開的窗口。
if (MyWindow::instance == NULL) {
MyWindow *w = new MyWindow(...);
MyWindow::instance = w;
}
這種設計模式被稱爲Singleton,它允許每個類只有一個對象。此外,這有點不同,因爲在Singleton中,構造函數不是public的,工廠方法應該用於製作對象,但它是相似的。
對我來說,看起來不是很優雅也不靈活。爲什麼當創建類中的(非靜態)成員變量工作的時候,把某些東西變成單身?如果您想要有多個對話實例(但不一定在給定的上下文中),該成員也可以工作。 –
正如我所說,它不是Singleton。這是這樣的。這個實現不會強制你只有一個對象。而且,靜態指針可以在類之外。但我同意你的看法。當局部變量足夠時,不應使用靜態變量。 –
在您的調用類(或主應用程序類,或者類似的東西)定義一個指針類:
dialogclass *someclass;
在該主類的構造函數,初始化對話框類:
someclass = NULL;
當你想要顯示的對話框中,執行這些方針的東西:
if (!someclass) someclass = new dialogclass(); // Creates a dialog instance if it does not already exist
if (!someclass->isVisible()) someclass->show(); // Only shows the dialog if it is not already shown.
我這個APPR同意oach。雖然將someClass初始化爲0,並只在需要時才創建它。如果someClass不爲null,可能需要在fooClicked()中調用raise()。 –
它給了我錯誤LOADS如果我使用此代碼: https://dl.dropbox.com/u/11701729/Code.txt – Fahmid
向我們顯示這些錯誤將是有益的......但你可能已經有'MainWindow :: mainWindow.cpp中的MainWindow(QWidget *)'。另外,什麼是'設置'? – lukad