0
의의 ContextMenu를 해제하는 데 실패 나는 사용자가 선택한 파일을 수정하거나 삭제할 수해서는 안되는 내 Qt는 프로그램에서 QFileDialog
을 사용하고 있습니다. 따라서 팝업 파일 대화 상자에서 마우스 오른쪽 버튼 클릭 메뉴가 필요하지 않습니다. 는 QFileDialog
//#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."));
}
}
샘플 코드를 최소한의 완벽한 예제로 작성하기 시작했습니다. 우선 알아 두어야 할 점은 파일 대화 상자가 네이티브 파일 대화 상자처럼 보입니다 (네이티브 파일 대화 상자가 아닌 경우). 마우스 오른쪽 버튼을 클릭하는 위치에 따라 다양한 팝업 메뉴가 있습니다. Windows/Explorer 동작에서 비롯된 것이므로 두려워 할 수 없습니다. (나는 Windows 10에 대해 말하고 있음을 언급하는 것을 잊어 버렸다.) – Scheff
네, 네이티브를 설정하기 위해 아래의 코드를 사용했습니다. 두 경우 모두 메뉴가 서로 다르지만 두 가지 모두 비활성화 할 수 없습니다. 그렇다면 마우스 오른쪽 버튼 클릭 이벤트/신호를 시스템에 차단하는 방법이 있습니까? filedialog.setOption (QFileDialog :: DontUseNativeDialog, true); filedialog.setOption (QFileDialog :: DontUseNativeDialog, false); –
나만의 파일 대화 상자를 만드는 방법은 무엇입니까? – m7913d