2017-04-06 1 views
0

의의 ContextMenu를 해제하는 데 실패 나는 사용자가 선택한 파일을 수정하거나 삭제할 수해서는 안되는 내 Qt는 프로그램에서 QFileDialog을 사용하고 있습니다. 따라서 팝업 파일 대화 상자에서 마우스 오른쪽 버튼 클릭 메뉴가 필요하지 않습니다. 는 QFileDialog

나는 사람이 사용하지 않도록하는 데 도움이 수, 사라지지 않는 오른쪽 클릭 메뉴// 오른쪽 클릭 메뉴를 set_invisible 방지, 아래 그림과 같이 사용하지 않도록 설정하는 두 가지 방법을 시도했지만 실패?

//#define NOMENUCLASS 1 
#ifdef NOMENUCLASS 
class Q_WIDGETS_EXPORT QNoMenuFileDialog : public QFileDialog 
{ 
public: 
    QNoMenuFileDialog(); 
    ~QNoMenuFileDialog(); 
protected: 
    void ShowContextMenu(const QPoint& pos); 
}; 
void QNoMenuFileDialog::ShowContextMenu(const QPoint& pos) {} 
QNoMenuFileDialog::QNoMenuFileDialog(){} 
QNoMenuFileDialog::~QNoMenuFileDialog(){} 
#endif 
void MainWindow::on_pushButton_2_clicked() 
{ 
    QStringList mimeTypeFilters; 
    mimeTypeFilters << "image/jpeg" /*will show "JPEG image (*.jpeg *.jpg *.jpe)*/ 
       << "image/png" /*will show "PNG image (*.png)"*/ 
       << "application/octet-stream"; /*will show "All files (*)"*/ 
#ifdef NOMENUCLASS 
    /*1. try to disable the right click menu using a invalid function ShowContextMenu --failed */ 
    QNoMenuFileDialog dialog; 
    dialog.setMimeTypeFilters(mimeTypeFilters); 
    dialog.setContextMenuPolicy(Qt::NoContextMenu); 
#else 
    /*2. try to disable the right click menu using setContextMenuPolicy(Qt::PreventContextMenu) --failed */ 
    QFileDialog dialog; 
    dialog.setContextMenuPolicy(Qt::PreventContextMenu); 
#endif 
    if(dialog.exec() == QDialog::Accepted) { 
      QString path = dialog.selectedFiles()[0]; 
      QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); 
    } else { 
      QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); 
    } 
} 
+0

샘플 코드를 최소한의 완벽한 예제로 작성하기 시작했습니다. 우선 알아 두어야 할 점은 파일 대화 상자가 네이티브 파일 대화 상자처럼 보입니다 (네이티브 파일 대화 상자가 아닌 경우). 마우스 오른쪽 버튼을 클릭하는 위치에 따라 다양한 팝업 메뉴가 있습니다. Windows/Explorer 동작에서 비롯된 것이므로 두려워 할 수 없습니다. (나는 Windows 10에 대해 말하고 있음을 언급하는 것을 잊어 버렸다.) – Scheff

+0

네, 네이티브를 설정하기 위해 아래의 코드를 사용했습니다. 두 경우 모두 메뉴가 서로 다르지만 두 가지 모두 비활성화 할 수 없습니다. 그렇다면 마우스 오른쪽 버튼 클릭 이벤트/신호를 시스템에 차단하는 방법이 있습니까? filedialog.setOption (QFileDialog :: DontUseNativeDialog, true); filedialog.setOption (QFileDialog :: DontUseNativeDialog, false); –

+0

나만의 파일 대화 상자를 만드는 방법은 무엇입니까? – m7913d

답변

0

나는이 문제를 피하기 위해 QFileDialog :: ReadOnly를 시도했다. dialog.setOption(QFileDialog::ReadOnly);