2012-11-02 26 views
5

Từ trong ứng dụng Qt của tôi, tôi muốn mở URL nhiều lần trong cùng một tab/cửa sổ trình duyệt. (Loại "làm mới" tab này lập trình)Mở URL trong một tab/cửa sổ trình duyệt nhất định

Sử dụng

QDesktopServices::openUrl(QUrl("http://www.domain.tld")); 

mở một tab/cửa sổ mới cho mỗi cuộc gọi. Có khả năng thêm thông số "target =" ở đâu đó không?

+0

Hi Elwood, bạn đã bao giờ tìm thấy một giải pháp cho điều này? Tôi có cùng một vấn đề chính xác: http://stackoverflow.com/questions/15116760/open-a-web-page-from-a-desktop-app-repeatedly-in-same-window – sipi

+0

Sipickles: Xin lỗi, không. Có vẻ như nó là không thể. Tôi đã suy nghĩ về việc tạo một tệp HTML cục bộ với '' trong đó và sau đó ghi đè tệp này theo yêu cầu. Nhưng tôi đã không thử điều đó và cách tiếp cận này có thể có một số nhược điểm. – Elwood

+0

Tôi đang tìm kiếm cùng một thứ (mở trong cùng một tab) nhưng tốt nhất là trong Qt5. Nhưng tôi cũng sẽ có một giải pháp Qt4. – amenthes

Trả lời

2

Điều bạn đang yêu cầu là không thể làm theo cách bạn tưởng tượng. openUrl() sử dụng hệ điều hành để chỉ định chương trình để mở đối số như được đề cập trong tài liệu của nó.

Có thể có một số giải pháp, nhưng không cách nào trong số chúng hoạt động tốt hoặc hoạt động trên tất cả các trình duyệt. Nó chỉ là loại kiểm soát hạt mịn này có khả năng là không thể đối với bạn.

Nếu bạn muốn kiểm soát tab trong trình duyệt, bạn có thể tìm thấy cửa sổ được biểu thị bằng tab đó và đóng cửa sổ đó ngay trước khi mở tab mới. Giải pháp này là loại hacky.

Một giải pháp khác là tìm HWND của hộp chỉnh sửa đang giữ URL, và thử thay đổi văn bản của nó bằng cách sử dụng SendMessage(). Tuy nhiên, tính năng này sẽ không hoạt động trên Chrome vì nó không sử dụng điều khiển riêng cho cửa sổ URL. Nó có thể hoạt động trên Firefox hoặc IE.

Giải pháp tốt hơn là làm cho trình duyệt web của riêng bạn mà bạn kiểm soát bằng cách sử dụng Qt WebKit. Nó là khá dễ dàng để render một trang trong đó và thay đổi url được xem. QWebView là cách triển khai dễ sử dụng của QtWebKit.

+0

Cảm ơn phyatt. Tôi không muốn sao chép chức năng trình duyệt hiện tại bằng cách kéo QtWebKit. – Elwood

0

Có thể bạn sẽ thấy điều này hữu ích:

Bạn có thể mở trang web và tải lại tab hoạt động.

Nếu bạn cung cấp tên của các trình duyệt như một cuộc tranh cãi, nó sẽ tìm và tải lại trang hiện

https://unix.stackexchange.com/questions/37258/refresh-reload-active-browser-tab-from-command-line

+0

nó là một thú vị, nhưng không phải là những gì tôi đã có trong tâm trí. Đối với một điều, tôi phụ thuộc vào 'xdotool', do đó, nó không có sẵn trên nền tảng. – amenthes

Các vấn đề liên quan