0

初心者の質問があります。次のコードで最大化された QFrame を作成しようとしていますが、次のようなエラーが表示されます。

error C3867: 'QWidget::showMaximized': function call missing argument list; use '&QWidget::showMaximized' to create a pointer to member

コード:

 class FrameWindow{

        private:

            QDesktopWidget *desktop;
            QFrame frame_window;
            QRect   frame_rect;

        public:

            FrameWindow(QApplication& app){

                desktop = app.desktop();
                desktop->showMaximized;
                frame_window.setWindowTitle("QT Trainning");
                frame_window.show();            
            }

私は C++ の初心者なので、何が足りないのでしょうか?

4

2 に答える 2

2

関数/メソッドは通常、空のものであっても引数リストが必要です -> object->method() ブラケットを使用してみてください。

あなたは最終的に欲しい:

w->setWindowState(w->windowState() | Qt::WindowFullScreen);

編集:またはあなたの解決策として:

w->setWindowState(w->windowState() | Qt::WindowMaximized);
于 2013-10-02T09:25:10.820 に答える
1

他の人がすでに気付いていることに加えて、現在のアプリケーションを渡すか、デスクトップへのポインターを保持することは完全に逆効果です。qAppアプリケーション ポインタは、グローバルマクロを介して常に使用できます。デスクトップを取得するには、単に使用します

qApp->desktop()

この値を「キャッシュ」する理由はまったくありません。必要なときにいつでも入手してください。それだけです。

また、ウィジェット タイプをメンバーとして保持するのではなく、ウィジェット タイプから派生させる方が慣用的です。コードは以下のように簡略化できます。これは完全な自己完結型の例です。

#include <QFrame>
#include <QApplication>

class FrameWindow : public QFrame {
public:
    FrameWindow(QWidget * parent = 0, Qt::WindowFlags * flags = 0) : 
        QFrame(parent, flags) 
    {
        setWindowTitle("Qt Training");
        setWindowState(windowState() | Qt::WindowMaximized);
    }
};

int main(int argc, char ** argv) {
    QApplication app(argc, argv);
    FrameWindow fw; // constructor is called here
    fw.show();
    return app.exec();
    // FrameWindow::~FrameWindow() destructor is called first before exiting
    // QApplication::~QApplication() destructor is called next
}
于 2013-10-03T04:26:31.103 に答える