Domanda

I have a project which provides the user with a GUI via Qt. I designed it with the Qt Designer (integrated in the Qt Creator) and now I would like to add another window in order to let the user change settings.
Afaik I have to use a QWidget to create another window and now I'm wondering how I may edit this QWidget in Qt Designer because I am only able to design mainwindow.
My code looks like this:

mainwindow.hpp

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = 0);
  ~MainWindow();

private slots:

// various slot calls    

// action triggered when clicking an entry in the QMenu of mainwindow
void on_action_dummy();

private:
  Ui::MainWindow *ui;
  QWidget dummy;
};

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// various implementations of the slot calls in mainwindow.hpp

void MainWindow::on_action_dummy()
{
    dummy.show();
}

Maybe I need a own class for my new window? Is QWindow even the right class for this task?

È stato utile?

Soluzione

You need to add a new UI file as well as header/class. There's an option for this in the "New File" dialog in Qt Creator (Qt Designer Form Class under the "Qt" sub-category on the sidebar). Then you open that up and instantiate the class like MainWindow in your program's entry point (int main()). Something like:

MySettingsDialog *dialog = new MySettingsDialog(this); 
dialog->show();

You need to be careful how you instantiate it--mainly making sure the object will survive when it leaves the current scope (e.g. using a pointer if you are calling this in a method inside your class). Also, how you show/exec your dialog can vary. This is usually the case when you want a blocking (modal) dialog instead of a new "window".

Edit: To handle the memory management, you can set the WA_DeleteOnClose attribute:

dialog->setAttribute(Qt::WA_DeleteOnClose);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top