查找框dialog

package jqt;

import io.qt.core.QObject;
import io.qt.core.Qt;
import io.qt.widgets.*;

class FindDialog extends QDialog {
    public final Signal2<String, Qt.CaseSensitivity> findNext = new Signal2<>();
    public final Signal2<String, Qt.CaseSensitivity> findPrevious = new Signal2<>();
    private QLabel label;
    private QLineEdit lineEdit;
    private QCheckBox caseCheckBox, backwardCheckBox;
    private QPushButton findButton, closeButton;

    public FindDialog() {
        this(null);
    }
    public FindDialog(QWidget parent) {
        super(parent);
        label = new QLabel("内容");
        lineEdit = new QLineEdit();
        label.setBuddy(lineEdit);

        caseCheckBox = new QCheckBox("区分大小写(&C)");
        backwardCheckBox = new QCheckBox("向上(&B)");

        findButton = new QPushButton("查找(&S)");
        findButton.setDefault(true);//设置为默认按钮,按下enter可点击
        findButton.setEnabled(false);

        closeButton = new QPushButton("取消");

        QObject.connect(lineEdit, "textChanged(String)", this, "EnableFindButton(String)");
        QObject.connect(findButton.clicked,this::FindClicked);
        closeButton.clicked.connect(this::reject);

        QHBoxLayout topLeftLayout = new QHBoxLayout();
        topLeftLayout.addWidget(label);
        topLeftLayout.addWidget(lineEdit);

        QVBoxLayout leftLayout = new QVBoxLayout();
        leftLayout.addLayout(topLeftLayout);
        leftLayout.addWidget(caseCheckBox);
        leftLayout.addWidget(backwardCheckBox);

        QVBoxLayout rightLayout = new QVBoxLayout();
        rightLayout.addWidget(findButton);
        rightLayout.addWidget(closeButton);
        rightLayout.addStretch();

        QHBoxLayout mainLayout = new QHBoxLayout();
        mainLayout.addLayout(leftLayout);
        mainLayout.addLayout(rightLayout);
        setLayout(mainLayout);

        setWindowTitle("搜索");
        setFixedHeight(sizeHint().height());
    }

    public void FindClicked(){
        String text=lineEdit.text();
        Qt.CaseSensitivity cs = caseCheckBox.isChecked()? Qt.CaseSensitivity.CaseSensitive : Qt.CaseSensitivity.CaseInsensitive;
        if (backwardCheckBox.isChecked())
            findPrevious.emit(text,cs);
        else
            findNext.emit(text,cs);
    }
    public void EnableFindButton(String text){
        findButton.setEnabled(!text.isEmpty());
    }

}

 

posted on 2025-04-03 11:44  dalgleish  阅读(15)  评论(0)    收藏  举报