Tôi đang sử dụng PyQt4
, nhưng điều này là đủ chung để có thể áp dụng cho QT
.PyQt (hoặc chỉ QT). Cách để QComboBox kích hoạt tín hiệu bất cứ khi nào nó được đặt thành giá trị (ngay cả khi không thay đổi)
tôi có một loạt các QComboBoxes
mà tôi điền từ trái sang phải (tức là chọn một mục trong tận cùng bên trái sẽ cư kế tiếp. Lựa chọn một mục trong một trong đó sẽ cư tiếp theo, và vân vân)
Tôi gặp khó khăn khi nhận tín hiệu của mình để kích hoạt trong mọi tình huống (nghĩa là bất kể chỉ mục hiện tại có thay đổi hay không và bất kể mục đó được đặt bởi người dùng hay được đặt theo chương trình).
Chi tiết:
Tôi dựa vào các tín hiệu của QCombox
đầu tiên để bắn bất cứ khi nào một mục được chọn để tôi có thể cư tiếp theo QCombobox
trong gui. Sau đó tôi dựa vào điều đó QCombobox
để phát ra tín hiệu để tôi có thể điền vào tín hiệu tiếp theo. Và cứ thế.
Tôi muốn chọn trước một mục trong mỗi QCombobox
dựa trên tương tác cuối cùng của người dùng với gui.
Tôi có một chức năng duy nhất cho mỗi QCombobox
có trách nhiệm điền và chọn trước chỉ QCombobox
. Mã này trông giống như sau:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
nơi intLastSavedState1
là một số nguyên có nguồn gốc từ văn bản mà đã được lựa chọn bởi người sử dụng lần cuối cùng họ đã sử dụng ứng dụng cuối cùng. Tôi đã hy vọng rằng dòng cuối cùng của chức năng này sẽ kích hoạt một tín hiệu có thể khiến chức năng của hộp combo tiếp theo tải và chọn trước một mục (comboBox2
). Và hành động đó sau đó sẽ làm cho hàm comboBox's
tiếp theo kích hoạt và nó sẽ xếp tầng tiếp theo và tiếp theo. Nhưng nó không hoạt động trên tất cả các trường hợp.
Tôi đã thử hai phiên bản của tín hiệu:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
và
self.connect(comboBox1, QtCore.SIGNAL("activated(const QString&)"), self.load_comboBox2)
Trong trường hợp đầu tiên, tín hiệu sẽ cháy chỉ khi intLastSavedState1
là khác nhau hơn bất cứ điều gì hiện đang được chọn trong hộp kết hợp. Điều này gây ra sự cố nếu người dùng đã chọn mục 0 cuối cùng từ danh sách đó. Trong trường hợp này QT
không nhận ra tập lệnh của tôi thiết lập chỉ mục hiện tại thành 0 làm thay đổi (kể từ khi tải hộp có vẻ như nó đã nằm trên chỉ mục 0) và do đó tín hiệu không kích hoạt.
Trong trường hợp thứ hai, tín hiệu sẽ kích hoạt bất kể nội dung hiện được chọn trong hộp kết hợp ... nhưng chỉ khi được người dùng kích hoạt. Nó sẽ không kích hoạt khi kịch bản của tôi cố thiết lập chỉ mục hiện tại theo chương trình.
Đây có vẻ là hai lựa chọn duy nhất của tôi liên quan đến tín hiệu. Vì vậy, ... là có một cách khác để chọn trước các mục trong một QCombobox
mà sẽ kích hoạt một tín hiệu mỗi và mọi thời gian?
Điều đó có vẻ hợp lý với tôi nếu nó hoạt động. Liệu phương pháp chuỗi này để khôi phục lại trạng thái trước đó cung cấp một lợi thế hơn có một thói quen khôi phục duy nhất mà chặn các tín hiệu trong khi bạn khôi phục lại tất cả ba cùng một lúc? –
Tôi không thể khôi phục cả ba vì nội dung của # 2 phụ thuộc vào nội dung được chọn cho # 1. Và nội dung của # 3 chỉ có thể được xác định tùy thuộc vào những gì đã được chọn cho # 2, vv ... – bvz
Cùng một vấn đề với tôi. Nhưng tuyên bố trên làm việc tốt khi tôi thực hiện nó trong một QWidget nhưng khi tôi mã hóa trong QMainWindow, các giá trị của ComboBox không kích hoạt bất cứ điều gì .... – vettipayyan