2013-03-19 78 views
1

我的應用程序在菜單欄中有一個「actionhelp」,點擊後會打開一個包含ok窗口的QDialog,在主窗口的另一端,我有一個QStackedWidget 所以我的問題是當我按下QDialog中的確定按鈕時,改變stackedwidget的索引?如何從Qdialog中更改QStackedWidget索引

+0

你有你的對話框上的東西,重要的是你?像一個QLineEdit? – saeed 2013-03-19 10:35:12

+0

沒有隻是標籤中的某些「文本」,而不是從該QDialog發送到主窗口 – 2013-03-19 11:11:46

回答

2

信號和插槽。連接ok按鈕的信號(或者在QDialog :: Accepted關閉後檢測它自己發出的信號)到一個插槽,該插槽將更改QStackedWidget中的索引。

示例代碼:

創建和主要方法連接的QAction:

QAction *displayDialog = new QAction("Display Dialog", this); 
connect(popup, SIGNAL(triggered()), this, SLOT(showDialog())); 

顯示對話框:

void showDialog() 
{ 
    YourDialog *dialog = new YourDialog(this); 
    int return_code = dialog.exec(); 
    if (return_code == QDialog::Accepted) 
    { 
     int index = someValue; 
     qStackedWidget.setCurrentIndex(index); 
    } 
} 
+0

怎麼辦? – 2013-03-19 11:05:32

+0

爲您添加了一些代碼 – Ninjammer 2013-03-20 02:32:52

+0

這幫助了我對類似情況的疑問以及.. thanx .. – RicoRicochet 2015-07-23 09:12:57

0

假設你有你的對話框行編輯和你想改變基於行編輯值(或旋轉框)的堆疊小部件的索引:

//your dialog 
//the constructor 
YourDialog::YourDialog(QWidget*parent) 
    :QDialog(parent) 
{ 
    connect(ur_ok_btn, SIGNAL(clicked()), SLOT(accept())); 
} 

//access to line edit value 
QString YourDialog::getUserEnteredValue(){return ur_line_edit->text();} 

在其中創建YourDialog類的一個實例:

//your main window 
    YourDialog dlg; 
    if(dlg.exec() == QDialog::Accepted){ 
     int i = dlg.getUserEnteredValue().toInt(); 
     ur_stacked_widget->setCurrentIndex(i); 
    } 
+0

試圖給我這個結果:/home/sliver/Documents/Workspace/clinetCloud/mainwindow.cpp:34:error:can not調用構造函數'Logindialog :: Logindialog'直接[-fpermissive] – 2013-03-19 11:04:02

+0

也許你已經定義了你的構造函數私有。 – saeed 2013-03-19 14:18:29