2014-06-05 6 views
0

사용자가 혼란 스럽기 때문에 사용자가 많은 항목을 가지고있을 때 일부 항목을 계산하고 메시지를 보내려고합니다.QErrorMessage가 계속 나타납니다.

그러나 다른 한편으로는 사용자는이 경고를 비활성화 할 수있는 옵션을 가져야합니다.

그래서 내가 QErrorMessage을 사용하려고했습니다.

그러나 내 QErrorMessage은 표시하지 않을 때도 계속 표시됩니다 (확인란을 선택 취소 한 경우).

void checkNumber(int const &n) 
{ 
    if(n > CriticalNumber) 
    { 
     QErrorMessage msg(this); 
     msg.showMessage("too much!"); 
    } 
} 

가 난 아무것도 잊지 않았다

:

이 내가 쓴 짧은 코드는?

한 번 체크 박스를 선택 취소 한 후 재미있는 것은,이 모든 다음 호출을 선택 해제됩니다 ...

// 편집 : QErrorMessage가 구성원 인 경우

이 오류도 발생 내 모든 호출에서 초기화되지 않았습니다.

// EDIT2 : 지금까지

나는 나는 나는 QString::arg를 사용하는 경우이 오류는 발생 것을 확신. 이 코드는 예제 코드에서 사용하지 않았습니다. 아무런 차이가 없다고 생각했기 때문입니다. 그래서 예는 다음과 같아야합니다

void showError(int const &n, QErrorMessage *msg) 
{ 
    msg->showMessage(tr("%1 is too big").arg(n)); 
} 

showError()는 이전의 경우 문에서 호출된다.

+1

, 당신의'msg' 객체 것이다 스코프를 벗어나면 파괴 될 것입니다. 그냥 화면에 깜박이면됩니다. 체크 박스를 선택 해제 할 충분한 시간이 있습니까? 그 외에는 문제를 재현 할 수 없습니다. 아마도 [SSCCE] (http : // sscce. org)가 도움이 될 것입니다. – thuga

+0

'QErrorMessage'는'OK '를 클릭 할 때까지 화면 상에 머물러 있습니다. 다음에 나타날 때 체크 박스는 체크되어 있지 않습니다. – user2699453

+1

적어도 코드는 그렇지 않습니다. 당신이 제공 한 스 니펫. ['QErrorMessage :: showMessage'] (http://qt-project.org/doc/qt-5/qerrormessage.html#showM essage)가 즉시 반환됩니다. 화면에 그대로 있으면'QDialog :: exec'을 어딘가에 호출해야합니다. – thuga

답변

0

mainwindow.cpp은 (EDI에 지정된

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QErrorMessage> 
#include <QTimer> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

public slots: 
    void showErrorMsg(); 

private: 
    Ui::MainWindow *ui; 
    QErrorMessage msg; 
    QTimer timer; 
}; 

#endif // MAINWINDOW_H 

: 여기

는 동작 예이며 t2).

QErrorMessage은 다시 표시하면 안되는 모든 QStrings을 저장한다는 것이 문제입니다. 내 arg() 이후

새로운 QStringQErrorMessage가 변경 될 때마다 표시됩니다 거의 모든 시간을 만듭니다.

예 :

QErrorMessage msg(this); 
showError(1, msg); 
showError(2, msg); 
showError(1, msg); 

showError(1, msg)는 QErrorMessage를 보여줄 것이다.당신이 체크 박스를 해제하면 , showError(2, msg)는 표시 QString은 첫 번째와 동일하기 때문에 (showError(1, msg)을 (다른 QString가 표시되기 때문에) 표시 만되지 않습니다. 당신의 코드에서

+2

메시지를 유형별로 필터링 할 수도 있습니다. ['QErrorMessage :: QErrorMessage :: showMessage (const QString & message, const QString & type)'] (http://qt-project.org/doc/qt-5/qerrormessage.html#showMessage-2)를보십시오. 이것은 귀하의 경우에 이상적입니다. – thuga

+0

감사합니다. 나는 이것을 보지 못했다 ... – user2699453

0

문제점을 재현 할 수 없습니다. 당신이해야 할 일은 checkNumber을 클래스의 멤버로 만들고, msg 객체에 대해서도 똑같이해야합니다.

mainwinodw.h I이 문제를 해결

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    connect(&timer, SIGNAL(timeout()), this, SLOT(showErrorMsg())); 
    timer.start(3000); // we use a timer to show an error message 
} 

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

void MainWindow::showErrorMsg() 
{ 
    msg.showMessage("My message"); 
} 
+0

방금 ​​테스트를 해봤지만 라이브러리 연결 문제가 있습니다. 내가이 문제를 해결하거나 해결할 때 알려 드리겠습니다. 그러나''msg'와'checkNumber()'를 모두 멤버로 만들었습니다. 감사합니다. – user2699453

관련 문제